package com.loves.admin.util.result;

import com.loves.admin.util.common.BaseErrorInfoInterface;
import com.loves.admin.util.common.CodeEnum;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 统一结果封装类
 *
 * @className ResultApi
 * @author fig 苏梓泳
 * @date 2019/11/7 13:02
 * @version V0.1
 */
public class ResultApi {

    /**
     * 状态码 默认200
     *
     * @author fig 苏梓泳
     * @date 2019/11/7 13:07
     */
    private String code = CodeEnum.SUCCESS.getCode();

    /**
     * 处理时间（获取系统当前时间）
     *
     * @author fig 苏梓泳
     * @date 2019/11/7 13:08
     */
    private String triggerTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

    /**
     * 信息
     *
     * @author fig 苏梓泳
     * @date 2019/11/7 13:08
     */
    String msg;

    /**
     * 成功调用（默认msg）
     *
     * @param data 返回数据
     * @author fig 苏梓泳
     * @date 2019/11/7 13:08
     * @params [data]
     * @return ResultApi
     */
    public static ResultApi success(Object data) {
        return new ResultSuccess(data);
    }

    /**
     * 成功调用（自定义msg）
     *
     * @param data 返回数据
     * @param msg 信息
     * @author fig 苏梓泳
     * @date 2019/11/7 13:09
     * @params [data, msg]
     * @return ResultApi
     */
    public static ResultApi success(Object data, String msg) {
        return new ResultSuccess(data, msg);
    }

    /**
     * 失败调用（默认code）
     *
     * @param msg 信息
     * @author fig 苏梓泳
     * @date 2019/11/7 13:10
     * @params [msg]
     * @return ResultApi
     */
    public static ResultApi error(String msg) {
        return new ResultError(msg);
    }

    /**
     * 失败调用（自定义msg，自定义code）
     *
     * @param msg 信息
     * @param code 状态码
     * @author fig 苏梓泳
     * @date 2019/11/7 13:11
     * @params [msg, code]
     * @return ResultApi
     */
    public static ResultApi error(String msg, String code) {
        return new ResultError(msg, code);
    }

    /**
     * 失败
     */
    public static ResultApi error(BaseErrorInfoInterface errorInfo) {
        ResultApi rb = new ResultApi();
        rb.setCode(errorInfo.getCode());
        rb.setMsg(errorInfo.getMsg());
        return rb;
    }


    ResultApi() {}

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getTriggerTime() {
        return triggerTime;
    }

    public void setTriggerTime(String triggerTime) {
        this.triggerTime = triggerTime;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}
